package ar.edu.utn.frba.disenio.arena;

import org.uqbar.arena.actions.MessageSend;
import org.uqbar.arena.bindings.NotNullObservable;
import org.uqbar.arena.layout.ColumnLayout;
import org.uqbar.arena.layout.HorizontalLayout;
import org.uqbar.arena.widgets.Button;
import org.uqbar.arena.widgets.Label;
import org.uqbar.arena.widgets.Panel;
import org.uqbar.arena.widgets.TextBox;
import org.uqbar.arena.widgets.tables.Column;
import org.uqbar.arena.widgets.tables.Table;
import org.uqbar.arena.windows.SimpleWindow;
import org.uqbar.arena.windows.Window;
import org.uqbar.arena.windows.WindowOwner;

import ar.edu.utn.frba.disenio.Asiento;
import ar.edu.utn.frba.disenio.arena.controllers.BuscadorAsiento;
import ar.edu.utn.frba.disenio.arena.transformers.ClaseTransformer;
import ar.edu.utn.frba.disenio.arena.transformers.PrecioTransformer;
import ar.edu.utn.frba.disenio.arena.transformers.UbicacionTransformer;

@SuppressWarnings("serial")
public class BuscarAsientosWindow extends SimpleWindow<BuscadorAsiento>
{
	private Window<?> parent;
	
	public BuscarAsientosWindow(WindowOwner parent)
	{
		super(parent, new BuscadorAsiento());
		this.parent = (Window<?>) parent;
	}

	
	@Override
	protected void createMainTemplate(Panel mainPanel) {
		this.setTitle("Aterrizar.com");
		this.setTaskDescription("Ingrese los parámetros de búsqueda");
		this.getModelObject().setWindow(this);

		super.createMainTemplate(mainPanel);

		this.createResultsGrid(mainPanel);
		this.createGridActions(mainPanel);
	}
	
	private void createResultsGrid(Panel mainPanel) {
		Table<Asiento> table = new Table<Asiento>(mainPanel, Asiento.class);
		table.setHeigth(200);
		table.setWidth(584);

		table.bindItemsToProperty("resultados");
		table.bindValueToProperty("asientoSeleccionado");

		this.describeResultsGrid(table);
	}


	private void describeResultsGrid(Table<Asiento> table) {
		new Column<Asiento>(table) //
		.setTitle("Aerolinea")
		.setFixedSize(100)
		.bindContentsToProperty("aerolinea");
		
		new Column<Asiento>(table) //
		.setTitle("Vuelo")
		.setFixedSize(100)
		.bindContentsToProperty("codigoVuelo");
		
		new Column<Asiento>(table) //
		.setTitle("Asiento")
		.setFixedSize(100)
		.bindContentsToProperty("numeroAsiento");
		
		new Column<Asiento>(table) //
		.setTitle("Precio")
		.setFixedSize(100)
		.bindContentsToTransformer(new PrecioTransformer());
		
		new Column<Asiento>(table) //
		.setTitle("Ubicacion")
		.setFixedSize(100)
		.bindContentsToTransformer(new UbicacionTransformer());
		
		
		new Column<Asiento>(table) //
		.setTitle("Clase")
		.setFixedSize(100)
		.bindContentsToTransformer(new ClaseTransformer());
	}
	
	protected void createGridActions(Panel mainPanel) {
		Panel actionsPanel = new Panel(mainPanel);
		actionsPanel.setLayout(new HorizontalLayout());

		Button botonComprar = new Button(actionsPanel);
		botonComprar.setCaption("Comprar");
		botonComprar.onClick(new MessageSend(this.getModelObject(), "comprarAsiento"));

		Button botonReservar = new Button(actionsPanel);
		botonReservar.setCaption("Reservar");
		botonReservar.onClick(new MessageSend(this.getModelObject(), "reservarAsiento"));
		
		Button botonCerrar = new Button(actionsPanel);
		botonCerrar.setCaption("Cerrar");
		botonCerrar.onClick(new MessageSend(this, "cerrarVentana"));

		// Deshabilitar los botones si no hay ningún elemento seleccionado en la grilla.
		NotNullObservable elementSelected = new NotNullObservable("asientoSeleccionado");
		botonComprar.bindEnabled(elementSelected);
		botonReservar.bindEnabled(elementSelected);
	}


	@Override
	protected void createFormPanel(Panel mainPanel) 
	{
		Panel panelBusqueda = new Panel(mainPanel);
		panelBusqueda.setLayout(new ColumnLayout(2));
		
		new Label(panelBusqueda).setText("Origen");
		new TextBox(panelBusqueda).bindValueToProperty("origen");
		
		new Label(panelBusqueda).setText("Destino");
		new TextBox(panelBusqueda).bindValueToProperty("destino");

		new Label(panelBusqueda).setText("Fecha");
		new TextBox(panelBusqueda).bindValueToProperty("fechaSalida");	

	}
	
	
	@Override
	protected void addActions(Panel actionsPanel) 
	{
		new Button(actionsPanel)
		.setCaption("Buscar")
		.onClick(new MessageSend(this.getModelObject(), "buscarAsientos"))
		.setAsDefault()
		.disableOnError();

		new Button(actionsPanel)
		.setCaption("Limpiar")
		.onClick(new MessageSend(this.getModelObject(), "limpiar"));
	}
	
	
	
	public void cerrarVentana()
	{
		this.close();
		this.parent.open();
	}

}
